<?php
    class Admin_UserController extends Main_Controller_Action{
        
        private $_arrParam;
        private $_db;
        public function init(){
            $this->loadTemplates('admin');
            $this->_arrParam = $this->_request->getParams();
            $this->_db = new Admin_Model_User();
        }
        
        public function preDispatch(){
        	$auth = Zend_Auth::getInstance();
        	if(!$auth->hasIdentity()){
        		if($this->_request->getActionName() != 'login'){
        			$this->_redirect('admin/index/login');
        		}
        	}
        }
        
        public function indexAction(){
            $this->view->headTitle('Quản lý thành viên');
            if($_POST["add"]){
                $this->_redirect('admin/user/add');
            }
            
            $this->_db = new Admin_Model_User();
            $result = $this->_db->listUsers();
                      
            $page = $this->_request->getParam('page', 1);
            $paginator = Zend_Paginator::factory($result);
            $paginator->setItemCountPerPage(20);
            $paginator->setPageRange(5);
            $paginator->setCurrentPageNumber($page);
            $this->view->total = $paginator->getTotalItemCount();	
	   		$this->view->paginator=$paginator;	
        }
        public function addAction(){
            $this->view->headTitle('Thêm thành viên');
            $db = new Admin_Model_User();
            $err="";
            if($this->_request->isPost()){
                $email      =$this->_request->getPost("email");
                $password   =$this->_request->getPost("pass");
                $repassword =$this->_request->getPost("repass");
                $fullname   =$this->_request->getPost("name");
                $filter = new Zend_Filter_StringTrim();
                $fullname = $filter->filter($fullname);
                $gender     =$this->_request->getPost("gender");               
                $adapter = new Zend_File_Transfer_Adapter_Http();
                $fileInfo = $adapter->getFileInfo();
                $ext= $fileInfo['file']['name'];
                if($ext!=''){
                    $fileName = time() . $ext;
                }
                else{
                    $fileName = $ext;
                }
                $adapter->setDestination('public/img/user'); 
                $adapter->addValidator ( 'Extension', false, 'jpg,png,gif')
        			->addValidator ('Size', false, 3000000);
                $adapter->addFilter('Rename', array('source' => $fileInfo['tmp_name'],
                 'target' => "public/img/user". '/'.$fileName,
                 'overwrite' => true));
                $adapter->receive();
                $birthday   =$this->_request->getPost("birthday");
                $phone      =$this->_request->getPost("phone");
                $role_id    =$this->_request->getPost("role");
                $status     =$this->_request->getPost("status");
                $code=$db->randomCode(15);
                $validate = new Admin_Form_ValidateUser();
                    if(!$validate->validateUserName($fullname)){
                        $errname="Tên không được để trống và không bao gồm chữ số!";
                    }
                    if($email!="" and $db->Users($email)){
                        $err = "Tài khoản mà bạn nhập đã tồn tại!";
                    }
                    if(!$validate->validateEmail($email)){
                        $erremail="Email không được để trống và phải đúng định dạng!";
                    }
                    if(!$validate->validatePhone($phone)){
                        $errphone="Số điện thoại không được để trống và phải gồm 10-11 chữ số!";
                    }
                    if(!$validate->validateNotEmpty($birthday)){
                        $errbirthday="Trường ngày sinh không được để trống!";
                    }
                    if(!$validate->validatePassword($password)){
                        $errpass ="Password không được để trống và phải từ 8 đến 25 ký tự!";
                    }
                    if($password!='' and $repassword !='' and $password!=$repassword){
                        $errrepass="Mật khẩu bạn nhập chưa trùng khớp!";
                    }
                    if($err!='' || $errname!='' || $erremail!='' || $errphone!='' ||$errpass!='' || $errbirthday!='' || $errpass!=''||$errrepass!='' || $errrole!=''){
                        $this->view->err=$err;
                        $this->view->errname=$errname;
                        $this->view->erremail=$erremail;
                        $this->view->errphone=$errphone;
                        $this->view ->errpass=$errpass;
                        $this->view->errbirthday=$errbirthday;
                        $this->view->errrepass=$errrepass;
                        $this->view->errpass=$errpass;
                    }
                    else{
                        $flex = new Zendvn_Filter_RemoveCircumflex();
                        $lower  = new Zend_Filter_StringToLower();
                        
                        $data=array('email'   =>$email,
                            'password'  =>md5($password),
                            'fullname'  =>$fullname,
                            'gender'    =>$gender,
                            'avatar'    =>$fileName,
                            'birthday'  =>$birthday,
                            'phone'     =>$phone,
                            'role_id'   =>$role_id,
                            'code'      =>$code,
                            'status'    =>$status);
                        $result=$this->_db->addUser($data);
                        $_arrParam = array(
                            'user_id' => $result,
                            'fullname' => $fullname,
                            'email' => $email,
                            'birthday' => $birthday,
                            'avatar' => $fileName,
                            'phone' => $phone,
                            'status' => $status,
                            'user_name_filter' => $lower->filter($flex->filter($fullname)),
                        );
                        $this->_db->saveAddItem($_arrParam, array('task' => 'add'));
                        $this->_redirect('admin/user');
                    }      
                }
            
            $role = $this->_db->listRole();
            $this->view->role=$role;
            
        }
        public function editAction(){
            $db = new Admin_Model_User();
            $this->view->headTitle('Sửa thông tin thành viên');
            $user_id=$this->_request->getParam("id");
            $list = $db->listUser($user_id);
            $this->view->name=$list[0]["fullname"];
            $this->view->phone=$list[0]["phone"];
            $this->view->birthday=$list[0]["birthday"];
            $this->view->gender=$list[0]["gender"];
            $this->view->avatar=$list[0]["avatar"];
            $this->view->role_id=$list[0]["role_id"];
            $this->view->status=$list[0]["status"];
            
            if($this->_request->isPost()){
                $filter = new Zend_Filter_StringTrim();
                $flag = 0;
                $fullname   =$this->_request->getParam("name");
                $gender     =$this->_request->getPost("gender");
                $birthday   =$this->_request->getPost("birthday");
                $phone      =$this->_request->getPost("phone");
                $role_id    =$this->_request->getPost("role");
                $status     = $this->_request->getParam('status');
                $adapter = new Zend_File_Transfer_Adapter_Http();
                $fileInfo = $adapter->getFileInfo();
                $ext= $fileInfo['file']['name'];
                if($ext==""){
                    $validate = new Admin_Form_ValidateUser();
                    if(!$validate->validateUserName($fullname)){
                        $errname="Tên không được để trống và không bao gồm chữ số!";
                    }                    
                    if(!$validate->validatePhone($phone)){
                        $errphone="Số điện thoại không được để trống và phải gồm 10-11 chữ số!";
                    }
                    if(!$validate->validateNotEmpty($birthday)){
                        $errbirthday="Trường ngày sinh không được để trống!";
                    }
                
                    if($errname!='' ||$errphone!='' || $errbirthday!='' || $errrole!=''){
                        $this->view->errname=$errname;
                        $this->view->errphone=$errphone;
                        $this->view->errbirthday=$errbirthday;
                        $flag++;
                    }
                    else{
                        $filter = new Zend_Filter_StringTrim();
                        $flag = 0;
                        $flex = new Zendvn_Filter_RemoveCircumflex();
                        $lower = new Zend_Filter_StringToLower();
                            $data =array('fullname'  =>$fullname,
                                'email'     => $list[0]["email"],
                                'gender'    =>$gender,
                                'birthday'  =>$birthday,
                                'phone'     =>$phone,
                                'avatar'    =>$list[0]["avatar"],
                                'role_id'   =>$role_id, 
                                'status'    =>$status,        
                            );
                        $this->_db->editUserNoavatar($data,$user_id);
                        $_arrParam = array(
                            'user_id' => $user_id,
                            'fullname' => $fullname,
                            'email' => $list[0]['email'],
                            'birthday' => $birthday,
                            'avatar' => $list[0]["avatar"],
                            'phone' => $phone,
                            'status' => $status,
                            'user_name_filter' => $lower->filter($flex->filter($fullname)),
                        );
                        $this->_db->saveAddItem($_arrParam, array('task' => 'edit'));
                        $this->_redirect('admin/user');
                    }
                }
                else{
                    $fileName = time() . $ext;
                    $adapter->setDestination('public/img/user'); 
                    $adapter->addValidator ( 'Extension', false, 'jpg,png,gif')
            			->addValidator ('Size', false, 3000000);
                    $adapter->addFilter('Rename', array('source' => $fileInfo['tmp_name'],
                     'target' => "public/img/user". '/'.$fileName,
                     'overwrite' => true));
                    $adapter->receive();
                    $status     =$this->_request->getPost("status");
                    $validate = new Admin_Form_ValidateUser();
                    if(!$validate->validateUserName($fullname)){
                        $errname="Tên không được để trống và không bao gồm chữ số!";
                    }                    
                    if(!$validate->validatePhone($phone)){
                        $errphone="Số điện thoại không được để trống và phải gồm 10-11 chữ số!";
                    }
                    if(!$validate->validateNotEmpty($birthday)){
                        $errbirthday="Trường ngày sinh không được để trống!";
                    }
                    if($errname!='' ||$errphone!='' || $errbirthday!=''){
                        $this->view->errname=$errname;
                        $this->view->errphone=$errphone;
                        $this->view->errbirthday=$errbirthday;
                        $flag++;
                    }
                    else{
                        $filter = new Zend_Filter_StringTrim();
                        $flag = 0;
                        $flex = new Zendvn_Filter_RemoveCircumflex();
                        $lower = new Zend_Filter_StringToLower();
                        $data=array('fullname'  =>$fullname,
                            'email'     => $list[0]["email"],
                            'gender'    =>$gender,
                            'birthday'  =>$birthday,
                            'phone'     =>$phone,
                            'avatar'    =>$fileName,
                            'role_id'   =>$role_id, 
                            'status'    =>$status,        
                        );
                        $list = $db->listUser($user_id);
                        $filedel=$list[0]["avatar"];
                        $do = unlink("public/img/user/$filedel");
                        $this->_db->editUser($data,$user_id);
                        $_arrParam = array(
                            'user_id' => $user_id,
                            'fullname' => $fullname,
                            'email' => $list[0]['email'],
                            'birthday' => $birthday,
                            'avatar' => $fileName,
                            'phone' => $phone,
                            'status' => $status,
                            'user_name_filter' => $lower->filter($flex->filter($fullname)),
                        );
                        $this->_db->saveAddItem($_arrParam, array('task' => 'edit'));
                        $this->_redirect('admin/user');
                    }                    
                }
                
            }
            else{
                $this->view->name=$list[0]["fullname"];
                $this->view->phone=$list[0]["phone"];
                $this->view->birthday=$list[0]["birthday"];
                $this->view->gender=$list[0]["gender"];
                $this->view->avatar=$list[0]["avatar"];
                $this->view->role_id=$list[0]["role_id"];
                $this->view->status=$list[0]["status"];
                
            }
            $role = $this->_db->listRole();
            $this->view->role=$role;
        }
        public function deleteAction(){
            $db = new Admin_Model_User();
            $id=$this->_request->getParam("id");
            $listId=$this->_request->getParam("listId");
            $arr = Array();
            $arr = explode(',',$listId);
            
            if($id!=''){
                $list = $db->listUser($id);
                $filedel=$list[0]["avatar"];
                $do = unlink("public/img/user/$filedel");
                $db->deleteUser($id);
                $this ->_redirect('admin/user');
            }
            else{
                foreach($arr as $ids){
                    $list = $db->listUser($ids);
                    $filedel=$list[0]["avatar"];
                    $do = unlink("public/img/user/$filedel");
                $db->deleteUsers($arr);
                $this ->_redirect('admin/user');
            }
        }
        }
       public function searchAction(){
		
			$this->view->headTitle('Tìm kiếm thành viên');
            $filter = new Zend_Filter_StringTrim();
            $flex   = new Zendvn_Filter_RemoveCircumflex();
            $lower  = new Zend_Filter_StringToLower();
            $search = new Admin_Model_User();
            $flag   = 0;
            
			$keyword = $filter->filter($this->_arrParam['keyword']);
			$this->view->searchValue = $keyword;
				
			if($_POST['add']){
                $this->_redirect('admin/user/add');
            }
			$validation = new Admin_Form_ValidateUser();
			if($validation->validateSearch($keyword))
			{
				$this->view->searchValue = $keyword;
			}
			else
			{
				$this->view->errorSearch = 'Bạn chưa nhập từ khóa';
                $keyword = $lower->filter($flex->filter($keyword));
                $keyword = 'user_name_filter:' . $keyword;
				$result = $search->searchUser($keyword);
				$paginator = Zend_Paginator::factory($result);
				$paginator->setItemCountPerPage(40);
				$paginator->setPageRange(5);
				$currentPage = $this->_request->getParam('page', 1);
				$paginator->setCurrentPageNumber($currentPage);					
				$this->view->total = count($result);
				$this->view->data = $paginator;
				$flag++;
			}
			
			if($flag == 0)
			{
                $keyword = $lower->filter($flex->filter($keyword));
                $keyword = 'user_name_filter:' . $keyword;
				$result = $search->searchUser($keyword);
                
				$paginator = Zend_Paginator::factory($result);
				$paginator->setItemCountPerPage(40);
				$paginator->setPageRange(5);
				$currentPage = $this->_request->getParam('page', 1);
				$paginator->setCurrentPageNumber($currentPage);
				
				$this->view->total = count($result);
				$this->view->data = $paginator;
			}			
		}
        public function profileAction(){
            $this->view->headTitle('Thông tin thành viên');
            $db = new Admin_Model_User();
            $auth = Zend_Auth::getInstance();
            $infoUser = $auth->getIdentity();
            $email = $infoUser->email;
            $list=$db->Users($email);
            $user_id   =$list[0]["user_id"];
            $this->view->name=$list[0]["fullname"];
            $this->view->phone=$list[0]["phone"];
            $this->view->birthday=$list[0]["birthday"];
            $this->view->gender=$list[0]["gender"];
            $this->view->avatar=$list[0]["avatar"];
            $this->view->role_id=$list[0]["role_id"];
            if($this->_request->isPost()){
                $filter = new Zend_Filter_StringTrim();
                $flag = 0;
                $fullname   =$this->_request->getPost("name");
                $gender     =$this->_request->getPost("gender");
                $birthday   =$this->_request->getPost("birthday");
                $phone      =$this->_request->getPost("phone");
                $role_id    =$this->_request->getPost("role");
                $adapter = new Zend_File_Transfer_Adapter_Http();
                $fileInfo = $adapter->getFileInfo();
                $ext= $fileInfo['file']['name'];
                if($ext==""){
                    $validate = new Admin_Form_ValidateUser();
                    if(!$validate->validateUserName($fullname)){
                        $errname="Tên không được để trống và không bao gồm chữ số!";
                    }                    
                    if(!$validate->validatePhone($phone)){
                        $errphone="Số điện thoại không được để trống và phải gồm 10-11 chữ số!";
                    }
                    if(!$validate->validateNotEmpty($birthday)){
                        $errbirthday="Trường ngày sinh không được để trống!";
                    }
                   
                    if($errname!='' ||$errphone!='' || $errbirthday!='' || $errrole!=''){
                        $this->view->errname=$errname;
                        $this->view->errphone=$errphone;
                        $this->view->errbirthday=$errbirthday;
                        $flag++;
                    }
                    else{
                        $filter = new Zend_Filter_StringTrim();
                        $flag = 0;
                        $flex = new Zendvn_Filter_RemoveCircumflex();
                        $lower = new Zend_Filter_StringToLower();
                            $data =array('fullname'  =>$fullname,
                                'gender'    =>$gender,
                                'birthday'  =>$birthday,
                                'phone'     =>$phone,
                                'role_id'   =>$role_id, 
                                'status'    =>$list[0]['status'],
                            );
                        $this->_db->editUserNoavatar($data,$user_id);
                        $_arrParam = array(
                            'user_id' => $user_id,
                            'fullname' => $fullname,
                            'email' => $list[0]['email'],
                            'birthday' => $birthday,
                            'avatar' => $list[0]['avatar'],
                            'phone' => $phone,
                            'status' => $list[0]['status'],
                            'user_name_filter' => $lower->filter($flex->filter($fullname)),
                        );
                        $this->_db->saveAddItem($_arrParam, array('task' => 'edit'));
                        $this->_redirect('admin/user');
                    }
                }
                else{
                    $fileName = time() . $ext;
                    $adapter->setDestination('public/img/user'); 
                    $adapter->addValidator ( 'Extension', false, 'jpg,png,gif')
            			->addValidator ('Size', false, 3000000);
                    $adapter->addFilter('Rename', array('source' => $fileInfo['tmp_name'],
                     'target' => "public/img/user". '/'.$fileName,
                     'overwrite' => true));
                    $adapter->receive();
                    $status     =$this->_request->getPost("status");
                    $validate = new Admin_Form_ValidateUser();
                    if(!$validate->validateUserName($fullname)){
                        $errname="Tên không được để trống và không bao gồm chữ số!";
                    }                    
                    if(!$validate->validatePhone($phone)){
                        $errphone="Số điện thoại không được để trống và phải gồm 10-11 chữ số!";
                    }
                    if(!$validate->validateNotEmpty($birthday)){
                        $errbirthday="Trường ngày sinh không được để trống!";
                    }
                    if($errname!='' ||$errphone!='' || $errbirthday=''){
                        $this->view->errname=$errname;
                        $this->view->errphone=$errphone;
                        $this->view->errbirthday=$errbirthday;
                        $flag++;
                    }
                    else{
                        $filter = new Zend_Filter_StringTrim();
                        $flag = 0;
                        $flex = new Zendvn_Filter_RemoveCircumflex();
                        $lower = new Zend_Filter_StringToLower();
                        $data=array('fullname'  =>$fullname,
                                'gender'    =>$gender,
                                'birthday'  =>$birthday,
                                'phone'     =>$phone,
                                'avatar'    =>$fileName,
                                'role_id'   =>$role_id, 
                                'status'    =>$list[0]['status'],        
                        );
                        $list = $db->listUser($user_id);
                        $filedel=$list[0]["avatar"];
                        $do = unlink("public/img/user/$filedel");
                        $this->_db->editUser($data,$user_id);
                        $_arrParam = array(
                            'user_id' => $user_id,
                            'fullname' => $fullname,
                            'email' => $list[0]['email'],
                            'birthday' => $birthday,
                            'avatar' => $fileName,
                            'phone' => $phone,
                            'status' => $list[0]['status'],
                            'user_name_filter' => $lower->filter($flex->filter($fullname)),
                        );
                        $this->_db->saveAddItem($_arrParam, array('task' => 'edit'));
                        $this->_redirect('admin/user');
                    } 
                }
                
            }
            else{
                $this->view->name=$list[0]["fullname"];
                $this->view->phone=$list[0]["phone"];
                $this->view->birthday=$list[0]["birthday"];
                $this->view->gender=$list[0]["gender"];
                $this->view->avatar=$list[0]["avatar"];
                $this->view->role_id=$list[0]["role_id"];
                
            }
            $role = $this->_db->listRole();
            $this->view->role=$role;
        }
        public function changepasswordAction(){
            $this->view->headTitle('Thay đổi mật khẩu');
            $db = new Admin_Model_User();
            $auth = Zend_Auth::getInstance();
            $infoUser = $auth->getIdentity();
            $email = $infoUser->email;
            
            if($this->_request->isPost()){
                $list=$db->Users($email);
                $id   =$list[0]["user_id"];
                $oldpass1   =$list[0]["password"];
                
                $oldpass    =$this->_request->getPost("oldpass");
                $newpass    =$this->_request->getPost("newpass");
                $renewpass  =$this->_request->getPost("renewpass");
                $validate= new Admin_Form_ValidateUser();
                if(!$validate->validateNotEmpty($oldpass)){
                    $erroldpass= "Bạn chưa xác nhận mật khẩu!";
                }
                if(!$validate->validatePassword($newpass)){
                    $errnewpass ="Password không được để trống và phải từ 8 đến 25 ký tự!";
                }
                if($newpass!='' and $renewpass !='' and $newpass!=$renewpass){
                    $errrenewpass="Mật khẩu bạn nhập chưa trùng khớp!";
                }
                if($oldpass!='' and $oldpass1!=md5($oldpass)){
                    $error="Mật khẩu hiện tại bạn nhập không đúng!";
                }
                if($erroldpass!='' || $errnewpass!='' || $errrenewpass!='' ||$error!=''){
                    $this->view->erroldpass=$erroldpass;
                    $this->view->errnewpass=$errnewpass;
                    $this->view ->errrenewpass=$errrenewpass;
                    $this->view->error=$error;
                }
                else{
                    $db->changpass($id,md5($newpass));
                    $this->_redirect('admin/user');
                }
            }
            
        }
    }
    
 ?>